const { getDb } = require('../database');

class I18nDataModel {
  /**
   * 获取所有国际化数据
   * @returns {Promise<Array>} 国际化数据列表
   */
  static async getAllI18nData() {
    const db = await getDb();
    return db.all('SELECT * FROM i18n_data');
  }

  /**
   * 根据ID获取国际化数据
   * @param {number} id - 国际化数据ID
   * @returns {Promise<Object|null>} 国际化数据信息
   */
  static async getI18nDataById(id) {
    const db = await getDb();
    return db.get('SELECT * FROM i18n_data WHERE id = ?', [id]);
  }

  /**
   * 根据语言标签获取国际化数据
   * @param {string} languageTag - 语言标签
   * @returns {Promise<Array>} 国际化数据列表
   */
  static async getI18nDataByLanguage(languageTag) {
    const db = await getDb();
    return db.all('SELECT * FROM i18n_data WHERE language_tag = ?', [languageTag]);
  }

  /**
   * 根据代码和语言标签获取国际化数据
   * @param {string} code - 国际化代码
   * @param {string} languageTag - 语言标签
   * @returns {Promise<Object|null>} 国际化数据信息
   */
  static async getI18nDataByCodeAndLanguage(code, languageTag) {
    const db = await getDb();
    return db.get('SELECT * FROM i18n_data WHERE code = ? AND language_tag = ?', [code, languageTag]);
  }

  /**
   * 创建国际化数据
   * @param {Object} i18nData - 国际化数据
   * @returns {Promise<number>} 新创建的国际化数据ID
   */
  static async createI18nData(i18nData) {
    const { code, language_tag, message, remarks } = i18nData;
    const db = await getDb();
    const result = await db.run(
      'INSERT INTO i18n_data (code, language_tag, message, remarks) VALUES (?, ?, ?, ?)',
      [code, language_tag, message, remarks]
    );
    return result.lastID;
  }

  /**
   * 更新国际化数据
   * @param {number} id - 国际化数据ID
   * @param {Object} i18nData - 国际化数据
   * @returns {Promise<boolean>} 是否更新成功
   */
  static async updateI18nData(id, i18nData) {
    const { code, language_tag, message, remarks } = i18nData;
    const db = await getDb();
    const result = await db.run(
      'UPDATE i18n_data SET code = ?, language_tag = ?, message = ?, remarks = ? WHERE id = ?',
      [code, language_tag, message, remarks, id]
    );
    return result.changes > 0;
  }

  /**
   * 删除国际化数据
   * @param {number} id - 国际化数据ID
   * @returns {Promise<boolean>} 是否删除成功
   */
  static async deleteI18nData(id) {
    const db = await getDb();
    const result = await db.run('DELETE FROM i18n_data WHERE id = ?', [id]);
    return result.changes > 0;
  }
}

module.exports = I18nDataModel;